package com.yutel.socket;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;

public class TestISMark {

	public static void main(String[] args) {
		byte[] bytes = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
		ByteArrayInputStream in = new ByteArrayInputStream(bytes);
		// 将ByteArrayInputStream包含在一个BufferedInputStream，并初始化缓冲区大小为2。
		BufferedInputStream bis = new BufferedInputStream(in, 2);
		try {
			// 读取字节1
			System.out.print(bis.read() + ",");
			// 在字节2处做标记，同时设置readlimit参数为1
			System.out.println("mark");
			bis.mark(1);
			System.out.println("readlimit is 1");
			// 连续读取两个字节
			System.out.print(bis.read() + ",");
			System.out.print(bis.read() + ",");
			// 虽然readlimit参数为1，但是这个BufferedInputStream类的缓冲区大小为2，
			// 所以允许读取2字节
			System.out.println("reset");
			// 调用reset方法，未发生异常，说明mark标记仍有效。
			bis.reset();
//			bis.mark(3); // 去掉该行注释,下面的代码正常执行

			// reset重置后连续读取3个字节，超过了BufferedInputStream类的缓冲区大小
			System.out.print(bis.read() + ",");
			System.out.print(bis.read() + ",");
			System.out.print(bis.read() + ",");
			// 再次调用reset重置，抛出异常，说明mark后读取3个字节，mark标记失效
			System.out.println("reset again");
			bis.reset();
			System.out.println("reset successful");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
